package com.muyu.payment.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.common.core.web.page.PageQueryModel;
import com.muyu.payment.domain.PaymentRefund;
import com.muyu.payment.domain.model.PaymentRefundQueryModel;
import com.muyu.payment.domain.model.PaymentRefundPageQueryModel;
import com.muyu.payment.domain.model.PaymentRefundSaveModel;
import com.muyu.payment.domain.model.PaymentRefundAuditModel;

import java.util.List;

/**
 * 支付退款申请Service接口
 *
 * @author muyu
 * @date 2025-09-16
 */
public interface PaymentRefundService extends IService<PaymentRefund> {

    /**
     * 查询支付退款申请列表
     *
     * @param pageQueryModel 支付退款申请
     * @return 支付退款申请
     */
    PageQueryModel<PaymentRefundPageQueryModel> pageQuery(PaymentRefundQueryModel pageQueryModel);

    /**
     * 查询支付退款申请列表
     * @param pageQueryModel 支付退款申请
     * @return 支付退款申请
     */
    List<PaymentRefund> exportList(PaymentRefund pageQueryModel);

    /**
     * 支付退款申请添加
     *
     * @param saveModel 支付退款申请
     */
    void save(PaymentRefundSaveModel saveModel);

    /**
     * 申请退款
     *
     * @param saveModel 退款申请信息
     * @return 退款申请号
     */
    String applyRefund(PaymentRefundSaveModel saveModel);

    /**
     * 审核退款申请
     *
     * @param auditModel 审核信息
     */
    void auditRefund(PaymentRefundAuditModel auditModel);

    /**
     * 执行退款
     *
     * @param refundNo 退款申请号
     */
    void processRefund(String refundNo);

    /**
     * 根据订单号查询退款申请
     *
     * @param orderNo 订单号
     * @return 退款申请列表
     */
    List<PaymentRefund> getRefundsByOrderNo(String orderNo);

    /**
     * 检查订单是否可以申请退款
     *
     * @param orderNo 订单号
     * @param userId 用户ID
     * @return 是否可以退款
     */
    boolean canApplyRefund(String orderNo, Long userId );
}